package org.soderiakelvy.controller.producto;

import java.util.Map;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;

import org.soderiakelvy.controller.util.Constante;
import org.soderiakelvy.controller.util.Validar;
import org.soderiakelvy.model.domain.PackVO;
import org.soderiakelvy.model.domain.ProductoVO;
import org.soderiakelvy.model.service.ProductoServicio;
import org.soderiakelvy.model.service.imp.ProductoServicioImp;

@ManagedBean
@ViewScoped
public class PackEdit {
	
	private ProductoServicio servicio  = new ProductoServicioImp();
	private PackVO pack = new PackVO();
	private ProductoVO producto = new ProductoVO();
	
	private String precioPack;
	private String precioBidon;
	private String cantidad;
	
	private String deshabilitarGuardar = "false";
	
	private boolean nombreValido = true;
	private boolean cantidadValido = true;
	private boolean precioPackValido = true;
	private boolean precioBidonValido = true;
	
	private String nombre="";
	
	public PackEdit(){
		System.out.println("Constructor de PackEdit");
		FacesContext fc = FacesContext.getCurrentInstance();
		Map<String,Object> sessionParams = fc.getExternalContext().getSessionMap();
		pack = (PackVO) sessionParams.get("pack");
		
		setCantidad(pack.getCantidad().toString());
		setPrecioPack(pack.getPrecioPack().toString());
		setPrecioBidon(pack.getPrecioBidon().toString());
		
		this.nombre = pack.getNombre();
	}
	
	public String modificar(PackVO pack){
		pack.setNombre(pack.getNombre().toUpperCase());
		servicio.updatePackVO(pack);
		return Constante.URL_PACK_LIST;
	}
	
	public String cancelar(){
		return Constante.URL_PACK_LIST;
	}

	// -------------Validaciones-----------------
		public void listenerNombre(){	
			if (this.pack.getNombre().isEmpty() || this.pack.getNombre() == null){
				this.deshabilitarGuardar = "true";
				this.nombreValido = false;
				FacesContext.getCurrentInstance().addMessage("form1::errorNombre", 
						new FacesMessage(FacesMessage.SEVERITY_FATAL,"El Nombre del Pack no puede ser Vacio", "para continuar "));
			}else{
				if (this.pack.getNombre().toUpperCase().equals(this.nombre.toUpperCase())) {
					this.nombreValido = true;
					if (this.cantidadValido  && this.precioPackValido && this.precioBidonValido) {
						this.deshabilitarGuardar = "false"; //HABILITO GUARDAR		
					}
				}else{
					if (servicio.existeNombrePack(this.pack.getNombre().toUpperCase()) ){
						FacesContext.getCurrentInstance().addMessage("form1::errorNombre", 
								new FacesMessage(FacesMessage.SEVERITY_FATAL,"El Nombre del Pack Existe", "para continuar "));
						this.deshabilitarGuardar = "true";  
						this.nombreValido = false;
					}else{
						this.nombreValido = true;
						if (this.cantidadValido  && this.precioPackValido && this.precioBidonValido) {
							this.deshabilitarGuardar = "false"; //HABILITO GUARDAR	
						}
					}
				}
			}
		}
		
		public void listenerCantidad(){
			if (Validar.isNumeroEntero(this.cantidad)){
				pack.setCantidad(Integer.parseInt(this.cantidad));
				if ((pack.getCantidad() > 0) ){
					this.cantidadValido = true;
					if (this.nombreValido && this.precioPackValido && this.precioBidonValido){
						this.deshabilitarGuardar = "false"; //HABILITO GUARDAR
						System.out.println("HABILITO GUARDAR  en Cantidad");
					}	
				}else{ 
					this.deshabilitarGuardar = "true";
					this.cantidadValido = false;
					FacesContext.getCurrentInstance().addMessage("form1::errorCantidad", 
							new FacesMessage(FacesMessage.SEVERITY_FATAL,"La Cantidad debe mayor que 0", "para continuar "));
				}
			}else{
				FacesContext.getCurrentInstance().addMessage("form1::errorCantidad", 
						new FacesMessage(FacesMessage.SEVERITY_FATAL,"La Cantidad debe ser un numero", "para continuar "));
				this.deshabilitarGuardar = "true";
				this.cantidadValido = false;
			}
		}
		
		public void listenerPrecioPack(){
			if (Validar.isNumeroFloat(this.precioPack)){
				pack.setPrecioPack(Float.parseFloat(this.precioPack));
				if ((pack.getPrecioPack() > 0)){
					this.precioPackValido = true;
					if (this.nombreValido && this.cantidadValido && this.precioBidonValido){
						this.deshabilitarGuardar = "false"; //HABILITO GUARDAR
						System.out.println("HABILITO GUARDAR  en precio Pack");
					}	
				}else{ 
					this.deshabilitarGuardar = "true";
					this.precioPackValido = false;
					FacesContext.getCurrentInstance().addMessage("form1::errorPrecioPack", 
							new FacesMessage(FacesMessage.SEVERITY_FATAL,"El Precio del Pack debe mayor que 0 ", "para continuar "));
				}
			}else{
				FacesContext.getCurrentInstance().addMessage("form1::errorPrecioPack", 
						new FacesMessage(FacesMessage.SEVERITY_FATAL,"El Precio del Pack debe ser un numero", "para continuar "));
				this.deshabilitarGuardar = "true";
				this.precioPackValido = false;
			}
		}
		
		public void listenerPrecioBidon(){
			if (Validar.isNumeroFloat(this.precioBidon)){
				pack.setPrecioBidon(Float.parseFloat(this.precioBidon));
				if ((pack.getPrecioBidon() > 0)){
					this.precioBidonValido = true;
					if (this.nombreValido && this.cantidadValido && this.precioPackValido){
						this.deshabilitarGuardar = "false"; //HABILITO GUARDAR
						System.out.println("HABILITO GUARDAR  en precio Pack");
					}	
				}else{ 
					this.deshabilitarGuardar = "true";
					this.precioBidonValido = false;
					FacesContext.getCurrentInstance().addMessage("form1::errorPrecioBidon", 
							new FacesMessage(FacesMessage.SEVERITY_FATAL,"El Precio del Pack debe mayor que 0 ", "para continuar "));
				}
			}else{
				FacesContext.getCurrentInstance().addMessage("form1::errorPrecioBidon", 
						new FacesMessage(FacesMessage.SEVERITY_FATAL,"El Precio del Pack debe ser un numero", "para continuar "));
				this.deshabilitarGuardar = "true";
				this.precioBidonValido = false;
			}
		}
		// -------------------------------------------
	
	//TODO Get and Set
	public PackVO getPack() {
		return pack;
	}

	public void setPack(PackVO pack) {
		this.pack = pack;
	}

	public String getPrecioPack() {
		return precioPack;
	}

	public void setPrecioPack(String precioPack) {
		this.precioPack = precioPack;
	}

	public String getPrecioBidon() {
		return precioBidon;
	}

	public void setPrecioBidon(String precioBidon) {
		this.precioBidon = precioBidon;
	}

	public ProductoVO getProducto() {
		return producto;
	}

	public void setProducto(ProductoVO producto) {
		this.producto = producto;
	}

	public String getCantidad() {
		return cantidad;
	}

	public void setCantidad(String cantidad) {
		this.cantidad = cantidad;
	}

	public String getDeshabilitarGuardar() {
		return deshabilitarGuardar;
	}

	public void setDeshabilitarGuardar(String deshabilitarGuardar) {
		this.deshabilitarGuardar = deshabilitarGuardar;
	}
}
